// 函数类型定义

// 我们可以给每个参数添加类型之后再为函数本身添加返回值类型
// TypeScript 能够根据返回语句自动退当出返回值类型，
// 因此返回值得类型一般可以忽略
// 写上去的目的是为了增加可读性
// 可以很方便的知道函数的参数和结果的值的类型

let z = 100;
// 普通版函数
function addToZ(x,y) {
    return x+y+z;
}
function add(x:number,y:number):number{
    // typescipt 参数定义类型后的函数
    // x,y参数的值限制为数字，
    // 函数的返回值限制为数字
    return x+y;
}

// 函数类型包含两部分：参数类型和返回值类型
// 但写出完整函数类型的时候
// 这两部分都是需要的
// 我们以参数列表的形式写出参数类型
// 为每一个参数指定一个名字和类型，
// 只要参数类型是匹配的
// 那么就认为他是有效的函数类型
// 而不在乎参数名是否正确
// 返回值类型是函数类型的必要部分
// 如果没有返回任何盒值
// 你也必须指定返回值类型为 void 而不能留空
// 1.
let myAddFn:(x:number,y:number)=>number
myAddFn = function(x,y){
    return x + y;
}
console.log(myAddFn(1,2));
// 2.
let myAddFn2:(x:number,y:number)=>number=(x,y)=>(x+y);
console.log(myAddFn2(100,200));
// 上面代码分为两部分：
// 1.第一部分是变量myAdd的类型定义部分，该部分 规定了myAdd的值是一个函数
// 函数有两个参数x,y值都得是数字
// 函数得执行返回的结果是一个数字
// 2.第二部分是创造了一个实际的函数，并把这个函数赋值给了变量myAdd
